package com.tjs.lucky.domain.support.ids;

import com.tjs.lucky.common.Ids;
import com.tjs.lucky.domain.support.ids.policy.RandomNumeric;
import com.tjs.lucky.domain.support.ids.policy.ShortCode;
import com.tjs.lucky.domain.support.ids.policy.SnowFlake;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: 田佳澍
 * @Description:
 * @DateTime: 2023/5/23 16:10
 **/
@Configuration
public class IdContext {

    /**
     * 创建 ID 生成策略对象，属于策略设计模式的使用方式
     *
     * @param snowFlake     雪花算法，长码，大量
     * @param shortCode     日期算法，短码，少量，全局唯一需要自己保证
     * @param randomNumeric 随机算法，短码，大量，全局唯一需要自己保证
     * @return IIdGenerator 实现类
     */
    @Bean
    public Map<Ids, DefindeIdGenerator> idGenerator(SnowFlake snowFlake, ShortCode shortCode, RandomNumeric randomNumeric) {
        Map<Ids, DefindeIdGenerator> idGeneratorMap = new HashMap<>(8);
        idGeneratorMap.put(Ids.SnowFlake, snowFlake);
        idGeneratorMap.put(Ids.ShortCode, shortCode);
        idGeneratorMap.put(Ids.RandomNumeric, randomNumeric);
        return idGeneratorMap;
    }
}
